/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.resume.sinistre.services.impl;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.resume.contrat.om.IEnvironnementLie;
import fr.generali.accueilclient.resume.sinistre.om.IResumeSinistre;
import fr.generali.accueilclient.resume.sinistre.services.IResumeSinistreService;
import fr.generali.refservcommuns.rce.liste.sinistres.consultationpersonneservice.ListeDossierSinistre;
import fr.generali.refservcommuns.rce.liste.sinistres.services.IConsultationSinistreListePersonneWebService;
import fr.generali.refservcommuns.rce.liste.sinistres.services.ResumeWSBusinessException;
import fr.generali.refservcommuns.rce.liste.sinistres.services.TechnicalFault;

/**
 * Implémentation de {@link IResumeSinistreService}
 * 
 * @author Guillaume Lancelin
 */
@Service
public class ResumeSinistreService implements IResumeSinistreService {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(ResumeSinistreService.class);

    /**
     * Assembler en entrée du S15
     */
    @Autowired
    @Qualifier("environnementLie2ListeDossierSinistreConverter")
    private Converter<IEnvironnementLie, ListeDossierSinistre> s15InputConverter;

    /**
     * Assembler en sorite du S15
     */
    @Autowired
    private ResumeSinistreServiceMapper s15OutputConverter;

    /**
     * Le service RCE de consultation des résumés sinistre (S15)
     */
    @Autowired
    @Qualifier("S15")
    private IConsultationSinistreListePersonneWebService s15;

    /**
     * {@inheritDoc}
     */
    public List<IResumeSinistre> consulterListeSinistresParIdClient(IEnvironnementLie environnementLie)
        throws AccueilClientBusinessException {
        LOGGER.info("consulterListeSinistresParIdClient");
        List<IResumeSinistre> liste = null;

        try {
            ListeDossierSinistre criteres = s15InputConverter.convert(environnementLie);
            
            if (criteres != null) {
                ListeDossierSinistre results = s15.consulterSinistresListePersonneAvecInfosClient(criteres, null);
                liste = s15OutputConverter.mapperConsultationListeContratParIdClient(results);
            }
        } catch (ResumeWSBusinessException e) {
            LOGGER.debug("Erreur business lors de l'appel au resume sinistre RCE: '{}'.", e.getMessage());
            throw new AccueilClientBusinessException(e.getMessage(), e);
        } catch (TechnicalFault e) {
            LOGGER.error("Erreur technique lors de l'appel au resume sinistre RCE: '{}'.", e.getMessage());
            throw new AccueilClientTechnicalException(e.getMessage(), e.getMessage(), e);
        }

        return liste;
    }
}
